home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / um / include / shared / um_uaccess.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  3.0 KB  |  98 lines

  1. /* 
  2.  * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
  3.  * Licensed under the GPL
  4.  */
  5.  
  6. #ifndef __ARCH_UM_UACCESS_H
  7. #define __ARCH_UM_UACCESS_H
  8.  
  9. #include <asm/elf.h>
  10. #include <asm/fixmap.h>
  11. #include "sysdep/archsetjmp.h"
  12.  
  13. #define __under_task_size(addr, size) \
  14.     (((unsigned long) (addr) < TASK_SIZE) && \
  15.      (((unsigned long) (addr) + (size)) < TASK_SIZE))
  16.  
  17. #define __access_ok_vsyscall(type, addr, size) \
  18.      ((type == VERIFY_READ) && \
  19.       ((unsigned long) (addr) >= FIXADDR_USER_START) && \
  20.       ((unsigned long) (addr) + (size) <= FIXADDR_USER_END) && \
  21.       ((unsigned long) (addr) + (size) >= (unsigned long)(addr)))
  22.  
  23. #define __addr_range_nowrap(addr, size) \
  24.     ((unsigned long) (addr) <= ((unsigned long) (addr) + (size)))
  25.  
  26. #define access_ok(type, addr, size) \
  27.     (__addr_range_nowrap(addr, size) && \
  28.      (__under_task_size(addr, size) || \
  29.       __access_ok_vsyscall(type, addr, size) || \
  30.       segment_eq(get_fs(), KERNEL_DS)))
  31.  
  32. extern int copy_from_user(void *to, const void __user *from, int n);
  33. extern int copy_to_user(void __user *to, const void *from, int n);
  34.  
  35. extern int __do_copy_to_user(void *to, const void *from, int n,
  36.                  void **fault_addr, jmp_buf **fault_catcher);
  37.  
  38. /*
  39.  * strncpy_from_user: - Copy a NUL terminated string from userspace.
  40.  * @dst:   Destination address, in kernel space.  This buffer must be at
  41.  *         least @count bytes long.
  42.  * @src:   Source address, in user space.
  43.  * @count: Maximum number of bytes to copy, including the trailing NUL.
  44.  *
  45.  * Copies a NUL-terminated string from userspace to kernel space.
  46.  *
  47.  * On success, returns the length of the string (not including the trailing
  48.  * NUL).
  49.  *
  50.  * If access to userspace fails, returns -EFAULT (some data may have been
  51.  * copied).
  52.  *
  53.  * If @count is smaller than the length of the string, copies @count bytes
  54.  * and returns @count.
  55.  */
  56.  
  57. extern int strncpy_from_user(char *dst, const char __user *src, int count);
  58.  
  59. /*
  60.  * __clear_user: - Zero a block of memory in user space, with less checking.
  61.  * @to:   Destination address, in user space.
  62.  * @n:    Number of bytes to zero.
  63.  *
  64.  * Zero a block of memory in user space.  Caller must check
  65.  * the specified block with access_ok() before calling this function.
  66.  *
  67.  * Returns number of bytes that could not be cleared.
  68.  * On success, this will be zero.
  69.  */
  70. extern int __clear_user(void __user *mem, int len);
  71.  
  72. /*
  73.  * clear_user: - Zero a block of memory in user space.
  74.  * @to:   Destination address, in user space.
  75.  * @n:    Number of bytes to zero.
  76.  *
  77.  * Zero a block of memory in user space.
  78.  *
  79.  * Returns number of bytes that could not be cleared.
  80.  * On success, this will be zero.
  81.  */
  82. extern int clear_user(void __user *mem, int len);
  83.  
  84. /*
  85.  * strlen_user: - Get the size of a string in user space.
  86.  * @str: The string to measure.
  87.  * @n:   The maximum valid length
  88.  *
  89.  * Get the size of a NUL-terminated string in user space.
  90.  *
  91.  * Returns the size of the string INCLUDING the terminating NUL.
  92.  * On exception, returns 0.
  93.  * If the string is too long, returns a value greater than @n.
  94.  */
  95. extern int strnlen_user(const void __user *str, int len);
  96.  
  97. #endif
  98.